/*
 * ProtocoloServidor.h
 *
 * Author: Grupo Nro.
 */

#ifndef PROTOCOLOSERVIDOR_H_
#define PROTOCOLOSERVIDOR_H_

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "ProtocoloConstantes.h"
#include "Protocolo.h"
#include "ComunicacionException.h"
#include <vector>
#include <map>
#include "Utils.h"
#include "iostream"
#include "Campania.h"
#include "Partida.h"
#include "Player.h"

using std::string;
using std::vector;
using std::cerr;
using std::map;

class ProtocoloServidor {
private:
	static string formatearLongitud(string & longitud);
	static string armarPrimerMensaje(string & codigoMensaje, long longitud);
	static bool enviarMensaje(int sockfd, string & codigoMensaje, string & mensaje);
public:
	ProtocoloServidor();
	virtual ~ProtocoloServidor();
	static string recv_opcionSeleccionadaInicial(int sockfdCliente);
	static bool send_campaniasExistentes(int sockfdCliente,
			const vector<Campania *> & campanias);
	static string recv_campaniaSeleccionadaYnombrePartida(int sockfdCliente);
	static bool send_partidasExistentesNoComenzadas(int sockfdCliente,
			map < Campania *, vector < Partida * > > & partidasNoComenzadas);
	static int recv_partidaSeleccionada(int sockfdCliente);
	static bool send_partidaListaParaComenzar(int sockfdCliente,
			Partida & partida);
	static string recv_comenzarPartida(int sockfdCliente);
	static bool send_partidaIniciada(int sockfdCliente, Partida & partida);
	static bool send_dimensionEscenario(int sockfdCliente, long cantidadFilas,
			long cantidadColumnas);
	static string recv_coordenadasEscenarioInteresa(int sockfdCliente);
	static bool send_escenarioInteresJugador(int sockfdCliente,
			vector<int> & tilesInteres, unsigned  long cantFilas,
			unsigned  long cantColumnas);
	static bool send_puntajeYjugador(int sockfdCliente, Player & player);
	static bool send_finPartida(int sockfdCliente, Partida & partida);
	static bool send_explosionBomba(int sockfdCliente);
	static bool send_bombermanDestruido(int sockfdCliente, Player & player);
	static bool send_zombieDestruido(int sockfdCliente);
	static bool send_bombaLanzadaPlanta(int sockfdCliente);
	static string recv_bombaGeneradaBomberman(int sockfdCliente);
	static bool send_bombaGeneradaBomberman(int sockfdCliente, long fila,
			long columna);
	static bool send_nuevoBomberman(int sockfdCliente, Partida & partida);
	static string recv_movimientoJugador(int sockfdCliente);
	static string recv_requestForUpdates(int sockfdCliente);
	static string recv_updates(int sockfdCliente);
	static bool send_requestForUpdates(int sockfdCliente, string updates);
	static bool send_scenario(int sockfdCliente, string scenario);
};

#endif /* PROTOCOLOSERVIDOR_H_ */
